<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Introduction</title>
<link rel="stylesheet" href="../boostbook.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.73.2">
<link rel="start" href="../index.html" title="RCF User Guide">
<link rel="up" href="../index.html" title="RCF User Guide">
<link rel="prev" href="../index.html" title="RCF User Guide">
<link rel="next" href="Tutorial.html" title="Tutorial">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<div class="spirit-nav">
<a accesskey="p" href="../index.html"><img src="../images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../images/home.png" alt="Home"></a><a accesskey="n" href="Tutorial.html"><img src="../images/next.png" alt="Next"></a>
</div>
<div class="section" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="rcf_user_guide.Intro"></a><a class="link" href="Intro.html" title="Introduction"> Introduction</a>
</h2></div></div></div>
<div class="toc"><dl>
<dt><span class="section"><a href="Intro.html#rcf_user_guide.Intro.WhatIsRcf"> What is RCF?</a></span></dt>
<dt><span class="section"><a href="Intro.html#rcf_user_guide.Intro.WhoShouldUseRcf"> Why should I use
      RCF?</a></span></dt>
</dl></div>
<div class="section" lang="en">
<div class="titlepage"><div><div><h3 class="title">
<a name="rcf_user_guide.Intro.WhatIsRcf"></a><a class="link" href="Intro.html#rcf_user_guide.Intro.WhatIsRcf" title="What is RCF?"> What is RCF?</a>
</h3></div></div></div>
<p>
        <span class="bold"><strong>RCF (Remote Call Framework)</strong></span> is a cross-platform
        interprocess communication framework for C++.
      </p>
<p>
        Unlike other communication frameworks, RCF doesn't use a separate IDL (Interface
        Definition Language). RCF interfaces are defined directly in C++, and serialization
        for user-defined data types likewise is implemented in C++. Instead of a
        separate IDL compiler tool, RCF uses the C++ compiler to generate client
        and server stubs.
      </p>
<p>
        RCF provides a broad range of interprocess communication features:
      </p>
<div class="itemizedlist"><ul type="disc">
<li>
            <span class="bold"><strong>Oneway</strong></span> and <span class="bold"><strong>twoway</strong></span>
            messaging.
          </li>
<li>
            <span class="bold"><strong>Batched oneway</strong></span> messaging.
          </li>
<li>
            <span class="bold"><strong>Publish/subscribe</strong></span> style messaging.
          </li>
<li>
            <span class="bold"><strong>Multicast</strong></span> and <span class="bold"><strong>broadcast</strong></span>
            messaging over UDP.
          </li>
<li>
            <span class="bold"><strong>Asynchronous remote calls</strong></span>.
          </li>
<li>
            <span class="bold"><strong>Server-to-client</strong></span> callback connections.
          </li>
<li>
            <span class="bold"><strong>Multiple transports</strong></span> (TCP, UDP, Windows
            named pipes and UNIX local domain sockets).
          </li>
<li>
            <span class="bold"><strong>Tunneling</strong></span> over HTTP and HTTPS.
          </li>
<li>
            <span class="bold"><strong>Compression</strong></span> (zlib) and <span class="bold"><strong>encryption</strong></span>
            (Kerberos, NTLM, Schannel, and OpenSSL).
          </li>
<li>
            Supports <span class="bold"><strong>IPv6</strong></span>.
          </li>
<li>
            Built in <span class="bold"><strong>serialization</strong></span> framework.
          </li>
<li>
            Built in <span class="bold"><strong>file transfer</strong></span> capabilities.
          </li>
<li>
            Robust <span class="bold"><strong>versioning</strong></span> support.
          </li>
<li>
            Support for <a href="http://www.boost.org/libs/serialization/" target="_top">Boost.Serialization</a>.
          </li>
<li>
            Support for <a href="http://code.google.com/p/protobuf/" target="_top">Protocol
            Buffers</a>.
          </li>
<li>
            Support for <a href="http://json-rpc.org/" target="_top">JSON-RPC</a>.
          </li>
<li>
            <span class="bold"><strong>Portability</strong></span> across a wide range of compilers,
            platforms and operating systems.
          </li>
<li>
            <span class="bold"><strong>Scalability</strong></span> acoss a wide range of applications,
            from simple parent-child IPC, right up to large scale distributed systems.
          </li>
<li>
            <span class="bold"><strong>Efficiency</strong></span>, with <span class="bold"><strong>zero-copy,
            zero-heap allocation</strong></span> on critical paths, on both server and
            client.
          </li>
<li>
            <span class="bold"><strong>No dependencies</strong></span>, apart from <a href="http://www.boost.org" target="_top">Boost</a>
            header files (1.35.0 or later). <a href="http://www.zlib.net" target="_top">zlib</a>
            and <a href="http://www.openssl.org" target="_top">OpenSSL</a> are optional.
          </li>
</ul></div>
<p>
        To start learning about programming with RCF, go straight to the <a class="link" href="Tutorial.html" title="Tutorial">Tutorial</a>.
      </p>
</div>
<div class="section" lang="en">
<div class="titlepage"><div><div><h3 class="title">
<a name="rcf_user_guide.Intro.WhoShouldUseRcf"></a><a class="link" href="Intro.html#rcf_user_guide.Intro.WhoShouldUseRcf" title="Why should I use RCF?"> Why should I use
      RCF?</a>
</h3></div></div></div>
<p>
        You should consider using RCF if you are writing C++ components that need
        some form of interprocess communication. For communication between native
        C++ components, there is little benefit in using XML and XML schemas to describe
        messages, as native serialization formats are more descriptive and efficient.
        There are also few benefits to separately compiled IDL files. RCF's approach
        of describing interfaces in C++ code makes for a simpler build and more flexible
        development.
      </p>
<p>
        RCF is written in 100% standard C++, and is both portable and efficient.
        Basing your communication layer on RCF gives you portability across a wide
        range of compilers, operating systems, and platforms, and the ability to
        pick and choose from a wide range of transport mechanisms, threading models,
        and messaging paradigms.
      </p>
<p>
        RCF has been designed as a real world tool for real world applications. RCF
        has been in large-scale commercial use since 2006, and today powers networked
        applications around the world. Some of the scenarios RCF has been used in
        include:
      </p>
<div class="itemizedlist"><ul type="disc">
<li>
            Client-server systems, across LAN's or WAN's. From industrial process
            control, to replacing DCOM in distributed desktop applications, to cross
            platform communication.
          </li>
<li>
            Back end server components, typically in a homogeneous LAN environment.
          </li>
<li>
            Communication between Windows services and their monitoring applications.
          </li>
<li>
            Parent-child process communication.
          </li>
<li>
            Generic local IPC, replacing COM.
          </li>
</ul></div>
</div>
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"></td>
<td align="right"><div class="copyright-footer">Copyright &#169; 2005 - 2016 Delta V Software</div></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="../index.html"><img src="../images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../images/home.png" alt="Home"></a><a accesskey="n" href="Tutorial.html"><img src="../images/next.png" alt="Next"></a>
</div>
</body>
</html>
